﻿using FlexFlow.Base.Interface;
using FlexFlow.Model;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace FlexFlow.Base.Interface
{
    /// <summary>
    /// 表示流程管理器接口
    /// </summary>
    public interface IProcessProvider : IPhysicalEntityProvider<Process>
    {
        /// <summary>
        /// 判断指定的文件Id的文件是否已经作为流程使用
        /// </summary>
        /// <param name="fileId">
        /// 要判断的文件Id
        /// </param>
        /// <returns>
        /// 一个值，表示文件是否已经作为流程使用
        /// </returns>
        bool CheckFileInstalled(Guid fileId);
        /// <summary>
        /// 取得指定的文件安装后的流程
        /// </summary>
        /// <param name="fileId">
        /// 要取得的流程模板的文件ID
        /// </param>
        /// <param name="state">
        /// 要取得的流程的状态
        /// </param>
        /// <returns>
        /// 取得的流程
        /// </returns>
        Process GetByFileId(Guid fileId, ProcessState? state = null);
        /// <summary>
        /// 取得一个未编译的模板信息并更新其编译信息为 Installing
        /// </summary>
        /// <returns>
        /// 取得的模板信息
        /// </returns>
        Process GetAndSetState();
        /// <summary>
        /// 更新指定模板的状态及消息
        /// </summary>
        /// <param name="state">
        /// 要更新的状态
        /// </param>
        /// <param name="message">
        /// 状态消息
        /// </param>
        /// <returns>
        /// 更新是否成功
        /// </returns>
        bool UpdateState(Guid id, ProcessState state, string message);
        /// <summary>
        /// 取得所有的流程定义的ID
        /// </summary>
        /// <param name="state">
        /// 流程状态
        /// </param>
        /// <returns>
        /// 取得的流程定义ID列表
        /// </returns>
        List<Guid> GetAllID(ProcessState state);
    }
}
